'''
字符串 ,不可变 / 序列性
'''

##序列特性
s = "Python"
for char in s:    # 迭代每个字符
    print(char, end=' ')  # 输出: P y t h o n


##转义字符
s = 'Yes,he doesn\'t'  #\是转义特殊字符
print(s,type(s),len(s))

##不想转义 前方加r
s = r'Yes,he doesn\'t'
print(s,type(s),len(s))

## 字符串的换行续接
s = 'xxxxx'\
    'yyyyy'\
    '''  zzzz  '''
print(s,type(s),len(s))
## 也可以这样续接
s = ('a' 'b' 'c')
print(s,type(s),len(s))

##字符串拼接
print('str'+'ing', 'my'*3 , ' '.join(["Hello", "Python"]))
##字符串的索引  他的索引如果是正数 正向数从0开始 如果是负数 逆向数 -1代表最后一个字符
word = 'Python'
print(word[0], word[5],word[-1], word[-6])
##字符串的切片
word = 'ilovepython'
print(word[1:5], word[5:], word[-10:-6])


##格式化
# ##放入变量
s = 'XXX'
f = f's变量等于{s}'
print(f)
###使用str的format方法
print("姓名：{}，年龄：{}".format("张三", 25))  # 输出: 姓名：张三，年龄：25
print("数字：{0:.2f}，重复：{0}".format(3.146))  # 输出: 数字：3.14，重复：3.14159


# 查找和替换
s = "hello world"
print(s.find("o"))       # 输出: 4（首次出现的索引，不存在返回-1）
print(s.replace("o", "0"))  # 输出: hell0 w0rld
print("hello" in s)       # 输出: True（判断子串是否存在）

#正则查找

import re
s = "电话：138-1234-5678，邮箱：user@example.com"
phone = re.findall(r'\d{3}-\d{4}-\d{4}', s)  # 匹配电话
email = re.findall(r'[\w.-]+@[\w.-]+\.\w+', s)  # 匹配邮箱
print(phone)  # 输出: ['138-1234-5678']
print(email)  # 输出: ['user@example.com']

# 分割与合并
s = "a,b,c,d"
parts = s.split(',')     # 输出: ['a', 'b', 'c', 'd']
print('|'.join(parts))   # 输出: a|b|c|d

# 按行分割
multi_line = "line1\nline2\nline3"
print(multi_line.splitlines())  # 输出: ['line1', 'line2', 'line3']


#大小写与空格处理
s = "  Hello World!  "
print(s.upper())       # 输出: HELLO WORLD!（转大写）
print(s.lower())       # 输出:  hello world!（转小写）
print(s.strip())       # 输出: Hello World!（去除首尾空格）
print(s.ljust(20, '*')) # 输出: Hello World!******（左对齐补全）

#字符编码 编码解码
s = "中文、English、日本語"
print(len(s))  # 输出: 9（每个字符算一个长度）
b = s.encode('utf-8')
print(b)  # 输出: b'\xe4\xb8\xad\xe6\x96\x87、English、\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e'
c = b.decode('utf-8')
print(c)


#一些常用的字符串内置方法
len("abc")#获取字符串长度
s.count("o")#统计子串出现次数
s.startswith("Hello")#判断是否以指定前缀开头
s.endswith("!")#判断是否以指定后缀结尾
"abc".isalpha()#判断是否全为字母
"123".isdigit()#判断是否全为数字
"5".zfill(3)#左侧补零填充至指定长度

